package com.wego.entity.vo.manager;

import com.wego.entity.domain.Goods;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

/**
 * 购物车查询类
 *
 *  @author hc
 */
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class CartVO {
    /**
     * 购物车编号
     */
    private Long id;

    /**
     * 购物车中的购物项
     */
    private List<CartItemVO> cartItemVOs = new ArrayList<>();

    /**
     * 商品总个数
     */
    private Integer totalAmount;

    /**
     * 市场价总金额
     */
    private BigDecimal totalMoney;

    /**
     * 用户编号
     */
    private Long userId;

    /**
     * 用户昵称
     */
    private String username;

    /**
     * 最后一次更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 将指定数量的商品添加到购物车
     * @param goods
     * @param amount
     */
    public void addCartItemVO2Cart(Goods goods, Integer amount) {
        if (goods == null) {
            return;
        }
        //当前购买的商品的金额
        BigDecimal money = goods.getPrice2().multiply(new BigDecimal(amount));
        //将买到的商品放入购物车

        //flag表示购物车中不包含 新加入的商品
        boolean flag = false;

        for (CartItemVO item : cartItemVOs) {
            // 如果购物车中已有，则数量和金额增加
            if (item.getGoodsId().equals(goods.getId())) {
                //当前选择的商品的数量
                item.setAmount(item.getAmount() + amount);
                //当前选择的商品的总金额
                item.setMoney(item.getMoney().add(money));

                flag = true;
                break;
            }
        }
        //如果购物车中没有
        if (!flag) {
            CartItemVO cartItemVO = goods2CartItemVO(goods);
            //当前选择的商品的数量
            cartItemVO.setAmount(amount);
            //当前选择的商品的总金额
            cartItemVO.setMoney(money);

            //将当前选择的商品添加到购物车中
            this.cartItemVOs.add(cartItemVO);
        }

        //购物车中商品的总数量
        int totalAmountTmp = this.getTotalAmount() == null ? 0 : this.getTotalAmount();
        this.totalAmount = totalAmountTmp + amount;
        //购物车中商品的总金额
        BigDecimal totalMoneyTmp = this.getTotalMoney() == null ? new BigDecimal(0) : this.getTotalMoney();
        this.totalMoney = totalMoneyTmp.add(money);
        //设置更新时间
        this.setUpdateTime(LocalDateTime.now());
    }

    /**
     * 将Goods转换成CartItemVO
     * @param goods
     * @return
     */
    public CartItemVO goods2CartItemVO(Goods goods) {
        if (goods == null) {
            return null;
        }

        CartItemVO cartItemVO = new CartItemVO();

        cartItemVO.setGoodsId(goods.getId());
        cartItemVO.setGoodsName(goods.getName());
        cartItemVO.setGoodsPic(goods.getPic());
        cartItemVO.setGoodsPrice(goods.getPrice2());
        cartItemVO.setGoodsUnit(goods.getUnit());
        cartItemVO.setGoodsSellingPoint(goods.getSellingPoint());
        if (goods.getId() != null) {
            cartItemVO.setId(goods.getId().intValue());
        }
        return cartItemVO;
    }
}